package cn.tedu.submarine;

import javax.swing.ImageIcon;
import java.awt.Graphics;
import java.util.Random;

/**
 * 海洋对象类，所有对象的超类
 */
public abstract class SeaObject {
    /**
     * 活着的
     */
    public static final int LIVE=0;
    /**
     * 死了的
     */
    public static final int DEAD=0;
    //设置当前状态，默认活着的
    private int state=LIVE;
    //设置宽高，x,y,速度
    private int width;
    private int height;
    private int x;
    private int y;
    private int speed;
    //生成get，set方法

    public int getState() {
        return state;
    }

    public void setState(int state) {
        this.state = state;
    }

    public int getWidth() {
        return width;
    }

    public void setWidth(int width) {
        this.width = width;
    }

    public int getHeight() {
        return height;
    }

    public void setHeight(int height) {
        this.height = height;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public int getSpeed() {
        return speed;
    }

    public void setSpeed(int speed) {
        this.speed = speed;
    }

    /**
     * 三种潜艇图片的宽高不一致，需要分别传参，x，y，speed一致，可以固定
     * @param width
     * @param height
     */
    public SeaObject(int width,int height){
        this.width=width;
        this.height=height;
        x=-width;//潜艇的宽
        Random rand=new Random();//随机数组对象
        //y是150到（窗口高-潜艇高）之间的随机数
        y=rand.nextInt(World.HEIGHT-height-150+1)+150;
        speed=rand.nextInt(3)+1;//速度是1-3之间的随机数
    }

    /**
     * 战舰，水雷，炸弹的宽高，x，y，speed不一致
     * @param x
     * @param y
     * @param speed
     * @param width
     * @param height
     */
    public SeaObject(int width,int height,int x,int y,int speed){
        this.width=width;
        this.height=height;
        this.x=x;
        this.y=y;
        this.speed=speed;
    }

    /**
     * 海洋对象移动，因为每个对象移动不一致，所以写成抽象方法
     */
    public abstract void move();

    /**
     * 获取对象的图片
     * @return
     */
    public abstract ImageIcon getImage();

    /**
     * 判断对象是否是活着的
     * @return
     */
    public boolean isLive(){
        //如果state为LIVE，表示活着，返回true
        return state==LIVE;
    }

    /**
     * 判断对象是否是死了的
     * @return
     */
    public boolean isDead(){
        //如果state为DEAD,表示死了的
        return state==DEAD;
    }

    /**
     * 画对象
     * @param g
     */
    public void paintImage(Graphics g){
        if(this.isLive()){
            this.getImage().paintIcon(null,g,0,0);
        }
    }
}
